clear; clc; close all;

%% 固定参数
a0 = -0.895;
a1 = 0.83;
a2 = 0.14;
b0 = 1.3;
b2 = 1;
d1 = 0;

% 扫描参数 b1 的取值范围
b1_values = linspace(-1, 0.5, 201);
num_b1 = length(b1_values);

%% 迭代设置
N_total = 2000;       % 总迭代步数
N_trans = 100;        % 舍弃瞬态步数
sample_interval = 1;  % 分叉图采样间隔

%% 用于存储每个 b1 下的李指数数据
LE_all = zeros(num_b1, 3);

%% 预估分叉图数据的最大记录数：每个 b1 至多有 (N_total - N_trans) / sample_interval 个数据点
maxSamples = num_b1 * ceil((N_total - N_trans) / sample_interval);
b1_bif = zeros(maxSamples, 1);
x_bif = zeros(maxSamples, 1);
sampleCount = 0;  % 用于计数实际记录的样本数

%% 循环遍历不同的 b1 值
for i = 1:num_b1
    b1 = b1_values(i);
    d2 = (1 - b1) * pi;

    % 调用封装函数计算李指数（丢弃瞬态后计算），初始条件为 (0.1, 0.1, 0.1)
    LE = LEs(a0, a1, a2, b0, b1, b2, d1, d2, 0.1, 0.1, 0.1, N_total, N_trans);
    LE_all(i, :) = LE;
    
    % 计算分叉图数据：对当前 b1 重新从初始条件迭代一次，
    % 先丢弃瞬态
    x = 0.1; y = 0.1; z = 0.1;
    for n = 1:N_trans
        [x, y, z] = vl_dmsin(a0, a1, a2, b0, b1, b2, d1, d2, x, y, z);
    end
    
    % 记录舍弃瞬态后的数据，每隔 sample_interval 记录一次 x 值
    for n = 1:(N_total - N_trans)
        [x, y, z] = vl_dmsin(a0, a1, a2, b0, b1, b2, d1, d2, x, y, z);
        if mod(n, sample_interval) == 0
            sampleCount = sampleCount + 1;
            x_bif(sampleCount) = x;
            b1_bif(sampleCount) = b1;
        end
    end
    
    fprintf('Progress: %.1f%%\n', 100 * i / num_b1);
end

% 截取实际记录的样本
b1_bif = b1_bif(1:sampleCount);
x_bif = x_bif(1:sampleCount);

%% 绘制图形：上图为李指数图，下图为分叉图
figure;

% 子图 (a)：李指数图
subplot(2,1,1);
hold on; grid on;
plot(b1_values, LE_all(:,1), 'r-', 'LineWidth', 1.5, 'DisplayName','LE_1');
plot(b1_values, LE_all(:,2), 'b-', 'LineWidth', 1.5, 'DisplayName','LE_2');
plot(b1_values, LE_all(:,3), 'g-', 'LineWidth', 1.5, 'DisplayName','LE_3');
plot(b1_values, zeros(size(b1_values)), 'k--', 'LineWidth', 1, 'DisplayName','0');
hold off;
xlabel('b_1','FontSize',12);
ylabel('李指数','FontSize',12);
title('图9 (上)：李指数 vs. b_1','FontSize',14);
legend('Location','best');

% 子图 (c)：分叉图（记录的是 x vs. b_1 的散点图）
subplot(2,1,2);
plot(b1_bif, x_bif, 'r.', 'MarkerSize', 1);
xlabel('b_1','FontSize',12);
ylabel('x','FontSize',12);
title('图9 (下)：分岔图 (x vs. b_1)','FontSize',14);
grid on;
